home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #4 / Amiga Plus CD - 2000 - No. 4.iso / Tools / Dev / SpeakFreely_Src / gsm / src / gsm_decode.c < prev    next >
C/C++ Source or Header  |  2000-05-27  |  4KB  |  126 lines

  1. /*
  2.  * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
  3.  * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
  4.  * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
  5.  */
  6.  
  7. /* $Header: /home/kbs/jutta/src/gsm/gsm-1.0/src/RCS/gsm_decode.c,v 1.1 1992/10/28 00:15:50 jutta Exp $ */
  8.  
  9. #include "private.h"
  10.  
  11. #include "gsm.h"
  12. #include "proto.h"
  13.  
  14. int gsm_decode P3((s, c, target), gsm s, gsm_byte * c, gsm_signal * target)
  15. {
  16.     word      LARc[8], Nc[4], Mc[4], bc[4], xmaxc[4], xmc[13*4];
  17.  
  18.     /* GSM_MAGIC  = (*c >> 4) & 0xF; */
  19.  
  20.     if (((*c >> 4) & 0x0F) != GSM_MAGIC) return -1;
  21.  
  22.     LARc[0]  = (*c++ & 0xF) << 2;        /* 1 */
  23.     LARc[0] |= (*c >> 6) & 0x3;
  24.     LARc[1]  = *c++ & 0x3F;
  25.     LARc[2]  = (*c >> 3) & 0x1F;
  26.     LARc[3]  = (*c++ & 0x7) << 2;
  27.     LARc[3] |= (*c >> 6) & 0x3;
  28.     LARc[4]  = (*c >> 2) & 0xF;
  29.     LARc[5]  = (*c++ & 0x3) << 2;
  30.     LARc[5] |= (*c >> 6) & 0x3;
  31.     LARc[6]  = (*c >> 3) & 0x7;
  32.     LARc[7]  = *c++ & 0x7;
  33.     Nc[0]  = (*c >> 1) & 0x7F;
  34.     bc[0]  = (*c++ & 0x1) << 1;
  35.     bc[0] |= (*c >> 7) & 0x1;
  36.     Mc[0]  = (*c >> 5) & 0x3;
  37.     xmaxc[0]  = (*c++ & 0x1F) << 1;
  38.     xmaxc[0] |= (*c >> 7) & 0x1;
  39.     xmc[0]  = (*c >> 4) & 0x7;
  40.     xmc[1]  = (*c >> 1) & 0x7;
  41.     xmc[2]  = (*c++ & 0x1) << 2;
  42.     xmc[2] |= (*c >> 6) & 0x3;
  43.     xmc[3]  = (*c >> 3) & 0x7;
  44.     xmc[4]  = *c++ & 0x7;
  45.     xmc[5]  = (*c >> 5) & 0x7;
  46.     xmc[6]  = (*c >> 2) & 0x7;
  47.     xmc[7]  = (*c++ & 0x3) << 1;        /* 10 */
  48.     xmc[7] |= (*c >> 7) & 0x1;
  49.     xmc[8]  = (*c >> 4) & 0x7;
  50.     xmc[9]  = (*c >> 1) & 0x7;
  51.     xmc[10]  = (*c++ & 0x1) << 2;
  52.     xmc[10] |= (*c >> 6) & 0x3;
  53.     xmc[11]  = (*c >> 3) & 0x7;
  54.     xmc[12]  = *c++ & 0x7;
  55.     Nc[1]  = (*c >> 1) & 0x7F;
  56.     bc[1]  = (*c++ & 0x1) << 1;
  57.     bc[1] |= (*c >> 7) & 0x1;
  58.     Mc[1]  = (*c >> 5) & 0x3;
  59.     xmaxc[1]  = (*c++ & 0x1F) << 1;
  60.     xmaxc[1] |= (*c >> 7) & 0x1;
  61.     xmc[13]  = (*c >> 4) & 0x7;
  62.     xmc[14]  = (*c >> 1) & 0x7;
  63.     xmc[15]  = (*c++ & 0x1) << 2;
  64.     xmc[15] |= (*c >> 6) & 0x3;
  65.     xmc[16]  = (*c >> 3) & 0x7;
  66.     xmc[17]  = *c++ & 0x7;
  67.     xmc[18]  = (*c >> 5) & 0x7;
  68.     xmc[19]  = (*c >> 2) & 0x7;
  69.     xmc[20]  = (*c++ & 0x3) << 1;
  70.     xmc[20] |= (*c >> 7) & 0x1;
  71.     xmc[21]  = (*c >> 4) & 0x7;
  72.     xmc[22]  = (*c >> 1) & 0x7;
  73.     xmc[23]  = (*c++ & 0x1) << 2;
  74.     xmc[23] |= (*c >> 6) & 0x3;
  75.     xmc[24]  = (*c >> 3) & 0x7;
  76.     xmc[25]  = *c++ & 0x7;
  77.     Nc[2]  = (*c >> 1) & 0x7F;
  78.     bc[2]  = (*c++ & 0x1) << 1;        /* 20 */
  79.     bc[2] |= (*c >> 7) & 0x1;
  80.     Mc[2]  = (*c >> 5) & 0x3;
  81.     xmaxc[2]  = (*c++ & 0x1F) << 1;
  82.     xmaxc[2] |= (*c >> 7) & 0x1;
  83.     xmc[26]  = (*c >> 4) & 0x7;
  84.     xmc[27]  = (*c >> 1) & 0x7;
  85.     xmc[28]  = (*c++ & 0x1) << 2;
  86.     xmc[28] |= (*c >> 6) & 0x3;
  87.     xmc[29]  = (*c >> 3) & 0x7;
  88.     xmc[30]  = *c++ & 0x7;
  89.     xmc[31]  = (*c >> 5) & 0x7;
  90.     xmc[32]  = (*c >> 2) & 0x7;
  91.     xmc[33]  = (*c++ & 0x3) << 1;
  92.     xmc[33] |= (*c >> 7) & 0x1;
  93.     xmc[34]  = (*c >> 4) & 0x7;
  94.     xmc[35]  = (*c >> 1) & 0x7;
  95.     xmc[36]  = (*c++ & 0x1) << 2;
  96.     xmc[36] |= (*c >> 6) & 0x3;
  97.     xmc[37]  = (*c >> 3) & 0x7;
  98.     xmc[38]  = *c++ & 0x7;
  99.     Nc[3]  = (*c >> 1) & 0x7F;
  100.     bc[3]  = (*c++ & 0x1) << 1;
  101.     bc[3] |= (*c >> 7) & 0x1;
  102.     Mc[3]  = (*c >> 5) & 0x3;
  103.     xmaxc[3]  = (*c++ & 0x1F) << 1;
  104.     xmaxc[3] |= (*c >> 7) & 0x1;
  105.     xmc[39]  = (*c >> 4) & 0x7;
  106.     xmc[40]  = (*c >> 1) & 0x7;
  107.     xmc[41]  = (*c++ & 0x1) << 2;
  108.     xmc[41] |= (*c >> 6) & 0x3;
  109.     xmc[42]  = (*c >> 3) & 0x7;
  110.     xmc[43]  = *c++ & 0x7;            /* 30  */
  111.     xmc[44]  = (*c >> 5) & 0x7;
  112.     xmc[45]  = (*c >> 2) & 0x7;
  113.     xmc[46]  = (*c++ & 0x3) << 1;
  114.     xmc[46] |= (*c >> 7) & 0x1;
  115.     xmc[47]  = (*c >> 4) & 0x7;
  116.     xmc[48]  = (*c >> 1) & 0x7;
  117.     xmc[49]  = (*c++ & 0x1) << 2;
  118.     xmc[49] |= (*c >> 6) & 0x3;
  119.     xmc[50]  = (*c >> 3) & 0x7;
  120.     xmc[51]  = *c & 0x7;            /* 33 */
  121.  
  122.     Gsm_Decoder(s, LARc, Nc, bc, Mc, xmaxc, xmc, target);
  123.  
  124.     return 0;
  125. }
  126.